/**
 * 星期枚举
 * @description 一周中的每一天
 */
export enum DayOfWeekEnum {
  /** 星期一 */
  MONDAY = 1,
  /** 星期二 */
  TUESDAY = 2,
  /** 星期三 */
  WEDNESDAY = 3,
  /** 星期四 */
  THURSDAY = 4,
  /** 星期五 */
  FRIDAY = 5,
  /** 星期六 */
  SATURDAY = 6,
  /** 星期日 */
  SUNDAY = 7
}

/**
 * 星期显示文本映射
 * @description 用于界面显示的星期文本
 */
export const DayOfWeekText: Record<DayOfWeekEnum, string> = {
  [DayOfWeekEnum.MONDAY]: '星期一',
  [DayOfWeekEnum.TUESDAY]: '星期二',
  [DayOfWeekEnum.WEDNESDAY]: '星期三',
  [DayOfWeekEnum.THURSDAY]: '星期四',
  [DayOfWeekEnum.FRIDAY]: '星期五',
  [DayOfWeekEnum.SATURDAY]: '星期六',
  [DayOfWeekEnum.SUNDAY]: '星期日'
};

/**
 * 星期简称文本映射
 * @description 用于界面显示的星期简称
 */
export const DayOfWeekShortText: Record<DayOfWeekEnum, string> = {
  [DayOfWeekEnum.MONDAY]: '周一',
  [DayOfWeekEnum.TUESDAY]: '周二',
  [DayOfWeekEnum.WEDNESDAY]: '周三',
  [DayOfWeekEnum.THURSDAY]: '周四',
  [DayOfWeekEnum.FRIDAY]: '周五',
  [DayOfWeekEnum.SATURDAY]: '周六',
  [DayOfWeekEnum.SUNDAY]: '周日'
};

/**
 * 课程安排模板状态枚举
 * @description 定义课程安排模板的各种状态
 */
export enum ScheduleTemplateStatusEnum {
  /** 进行中 */
  ACTIVE = 1,
  /** 已完成 */
  COMPLETED = 2,
  /** 暂停 */
  SUSPENDED = 3,
  /** 已取消 */
  CANCELLED = 4,
  /** 已删除 */
  DELETED = 5
}

/**
 * 课程安排模板状态显示文本映射
 * @description 用于界面显示的模板状态文本
 */
export const ScheduleTemplateStatusText: Record<ScheduleTemplateStatusEnum, string> = {
  [ScheduleTemplateStatusEnum.ACTIVE]: '进行中',
  [ScheduleTemplateStatusEnum.COMPLETED]: '已完成',
  [ScheduleTemplateStatusEnum.SUSPENDED]: '暂停',
  [ScheduleTemplateStatusEnum.CANCELLED]: '已取消',
  [ScheduleTemplateStatusEnum.DELETED]: '已删除'
};

/**
 * 课程安排模板状态颜色映射
 * @description 用于界面显示的模板状态颜色
 */
export const ScheduleTemplateStatusColor: Record<ScheduleTemplateStatusEnum, string> = {
  [ScheduleTemplateStatusEnum.ACTIVE]: 'processing',
  [ScheduleTemplateStatusEnum.COMPLETED]: 'success',
  [ScheduleTemplateStatusEnum.SUSPENDED]: 'warning',
  [ScheduleTemplateStatusEnum.CANCELLED]: 'error',
  [ScheduleTemplateStatusEnum.DELETED]: 'default'
};

/**
 * 课程实例状态枚举
 * @description 定义课程实例的各种状态
 */
export enum ScheduleInstanceStatusEnum {
  /** 已安排 */
  SCHEDULED = 1,
  /** 已完成 */
  COMPLETED = 2,
  /** 已取消 */
  CANCELLED = 3,
  /** 补课 */
  MAKEUP = 4,
  /** 已删除 */
  DELETED = 5
}

/**
 * 课程实例状态显示文本映射
 * @description 用于界面显示的实例状态文本
 */
export const ScheduleInstanceStatusText: Record<ScheduleInstanceStatusEnum, string> = {
  [ScheduleInstanceStatusEnum.SCHEDULED]: '已安排',
  [ScheduleInstanceStatusEnum.COMPLETED]: '已完成',
  [ScheduleInstanceStatusEnum.CANCELLED]: '已取消',
  [ScheduleInstanceStatusEnum.MAKEUP]: '补课',
  [ScheduleInstanceStatusEnum.DELETED]: '已删除'
};

/**
 * 课程实例状态颜色映射
 * @description 用于界面显示的实例状态颜色
 */
export const ScheduleInstanceStatusColor: Record<ScheduleInstanceStatusEnum, string> = {
  [ScheduleInstanceStatusEnum.SCHEDULED]: 'default',
  [ScheduleInstanceStatusEnum.COMPLETED]: 'success',
  [ScheduleInstanceStatusEnum.CANCELLED]: 'error',
  [ScheduleInstanceStatusEnum.MAKEUP]: 'warning',
  [ScheduleInstanceStatusEnum.DELETED]: 'default'
};

/**
 * 出勤状态枚举
 * @description 学生的出勤状态
 */
export enum AttendanceStatusEnum {
  /** 出席 */
  PRESENT = 'present',
  /** 缺席 */
  ABSENT = 'absent',
  /** 迟到 */
  LATE = 'late',
  /** 早退 */
  EARLY_LEAVE = 'early_leave'
}

/**
 * 出勤状态显示文本映射
 * @description 用于界面显示的出勤状态文本
 */
export const AttendanceStatusText: Record<AttendanceStatusEnum, string> = {
  [AttendanceStatusEnum.PRESENT]: '出席',
  [AttendanceStatusEnum.ABSENT]: '缺席',
  [AttendanceStatusEnum.LATE]: '迟到',
  [AttendanceStatusEnum.EARLY_LEAVE]: '早退'
};

/**
 * 出勤状态颜色映射
 * @description 用于界面显示的出勤状态颜色
 */
export const AttendanceStatusColor: Record<AttendanceStatusEnum, string> = {
  [AttendanceStatusEnum.PRESENT]: 'success',
  [AttendanceStatusEnum.ABSENT]: 'error',
  [AttendanceStatusEnum.LATE]: 'warning',
  [AttendanceStatusEnum.EARLY_LEAVE]: 'warning'
};

/**
 * 支付状态枚举
 * @description 课程费用的支付状态
 */
export enum PaymentStatusEnum {
  /** 未支付 */
  UNPAID = 'unpaid',
  /** 已支付 */
  PAID = 'paid',
  /** 已退款 */
  REFUNDED = 'refunded'
}

/**
 * 支付状态显示文本映射
 * @description 用于界面显示的支付状态文本
 */
export const PaymentStatusText: Record<PaymentStatusEnum, string> = {
  [PaymentStatusEnum.UNPAID]: '未支付',
  [PaymentStatusEnum.PAID]: '已支付',
  [PaymentStatusEnum.REFUNDED]: '已退款'
};

/**
 * 支付状态颜色映射
 * @description 用于界面显示的支付状态颜色
 */
export const PaymentStatusColor: Record<PaymentStatusEnum, string> = {
  [PaymentStatusEnum.UNPAID]: 'error',
  [PaymentStatusEnum.PAID]: 'success',
  [PaymentStatusEnum.REFUNDED]: 'warning'
};

/**
 * 课表视图类型枚举
 * @description 课表的显示视图类型
 */
export enum ScheduleViewTypeEnum {
  /** 日视图 */
  DAY = 'day',
  /** 周视图 */
  WEEK = 'week',
  /** 月视图 */
  MONTH = 'month',
  /** 混合视图 */
  MIXED = 'mixed'
}

/**
 * 课表视图类型显示文本映射
 * @description 用于界面显示的视图类型文本
 */
export const ScheduleViewTypeText: Record<ScheduleViewTypeEnum, string> = {
  [ScheduleViewTypeEnum.DAY]: '日视图',
  [ScheduleViewTypeEnum.WEEK]: '周视图',
  [ScheduleViewTypeEnum.MONTH]: '月视图',
  [ScheduleViewTypeEnum.MIXED]: '混合视图'
};

/**
 * 课程操作类型枚举
 * @description 对课程安排可执行的操作类型
 */
export enum ScheduleActionEnum {
  /** 查看详情 */
  VIEW = 'view',
  /** 编辑安排 */
  EDIT = 'edit',
  /** 删除安排 */
  DELETE = 'delete',
  /** 暂停安排 */
  SUSPEND = 'suspend',
  /** 恢复安排 */
  RESUME = 'resume',
  /** 完成课程 */
  COMPLETE = 'complete',
  /** 取消课程 */
  CANCEL = 'cancel',
  /** 重新安排 */
  RESCHEDULE = 'reschedule',
  /** 添加补课 */
  ADD_MAKEUP = 'add_makeup',
  /** 标记出勤 */
  MARK_ATTENDANCE = 'mark_attendance',
  /** 添加评价 */
  ADD_EVALUATION = 'add_evaluation',
  /** 查看统计 */
  VIEW_STATISTICS = 'view_statistics'
}

/**
 * 冲突类型枚举
 * @description 课程安排冲突的类型
 */
export enum ConflictTypeEnum {
  /** 时间重叠 */
  TIME_OVERLAP = 'time_overlap',
  /** 完全相同时间 */
  SAME_TIME = 'same_time',
  /** 地点冲突 */
  LOCATION_CONFLICT = 'location_conflict',
  /** 教师冲突 */
  TEACHER_CONFLICT = 'teacher_conflict'
}

/**
 * 冲突类型显示文本映射
 * @description 用于界面显示的冲突类型文本
 */
export const ConflictTypeText: Record<ConflictTypeEnum, string> = {
  [ConflictTypeEnum.TIME_OVERLAP]: '时间重叠',
  [ConflictTypeEnum.SAME_TIME]: '时间完全相同',
  [ConflictTypeEnum.LOCATION_CONFLICT]: '地点冲突',
  [ConflictTypeEnum.TEACHER_CONFLICT]: '教师冲突'
};

/**
 * 提醒方式枚举
 * @description 课程提醒的方式
 */
export enum ReminderMethodEnum {
  /** 系统通知 */
  NOTIFICATION = 'notification',
  /** 邮件提醒 */
  EMAIL = 'email',
  /** 短信提醒 */
  SMS = 'sms'
}

/**
 * 提醒方式显示文本映射
 * @description 用于界面显示的提醒方式文本
 */
export const ReminderMethodText: Record<ReminderMethodEnum, string> = {
  [ReminderMethodEnum.NOTIFICATION]: '系统通知',
  [ReminderMethodEnum.EMAIL]: '邮件提醒',
  [ReminderMethodEnum.SMS]: '短信提醒'
};